/*
题目：翻转数位
给定一个32位整数 num，你可以将一个数位从0变为1。请编写一个程序，找出你能够获得的最长的一串1的长度。
 */
public class ReverseBits {
    public int reverseBits(int num) {
        int cur = 0;
        int prev = 0;
        int ans = 0;
        for (;num != 0; num >>>= 1) {
            if ((num & 1) == 1) {
                cur++;
            } else {
                prev = cur + 1;
                cur  = 0;
            }
            ans = Math.max(prev + cur, ans);
        }
        if (prev == 0)  ans++;   //代表循环中没有遇到过0，那就直接给他添上1
        return ans <= 32 ? ans : 32;
    }
}
